package com.msmall.community.klg.service;

import java.util.List;

import com.msmall.base.pager.PaginationSupport;
import com.msmall.base.service.BaseManager;
import com.msmall.community.klg.model.Article;
import com.msmall.community.klg.model.ArticleReply;
import com.msmall.community.klg.model.SegmentArticle;

public interface ArticleManager extends BaseManager<Article, Long>{

	
	/**
	 * 创建新的文章
	 * @param article
	 * @param segid 文章分类ID
	 * @param userid creator
	 * @param userAgentType
	 * @return
	 */
	public Article saveArticle(Article article, Long segid, Long userid, String userAgentType) throws Exception;

	public void deleteArticle(Long articleid) throws Exception;
	
	public Article getArticle(Long articleid) throws Exception;
	/**
	 * 通过文章ID 查找文章分类
	 * @param articleid
	 * @return
	 * @throws Exception
	 */
	public SegmentArticle getSegmentByArticleid(Long articleid) throws Exception;
	/**
	 * 通过文章ID 查找文章以及文章分类<br/>
	 * object[0] = Article Object[1]=SegmentArticle
	 * @param articleid
	 */
	public Object[] getArticleAndSegmentByArticle(Long articleid) throws Exception;
	/**
	 * 通过时间比较 获得当前文章的前几篇文章<br/>
	 * sameSeg是否在同一个文章分类下比较
	 */
	public List<Article> getPreArticle(Long articleid, Long segid, boolean sameSeg,int amount) throws Exception;
	/**
	 * 通过时间比较 获得当前文章的后几篇文章<br/>
	 * sameSeg是否在同一个文章分类下比较
	 */
	public List<Article> getNextArticle(Long articleid, Long segid, boolean sameSeg,int amount) throws Exception;
	
	/**
	 * 获得文章分类下的所有文章
	 * 通过创建时间排序
	 * 所有的都选出 enabled or not
	 * userid 每页的查询数量根据//没有实现
	 * children : 包含此segment下的多有子segment
	 */
	public void getArticlePaginationBySegment(PaginationSupport page, Long userid, Long segid, boolean children) throws Exception;
	/**
	 * 获得文章分类下的所有文章
	 * 通过创建时间排序
	 * 所有的都选出 enabled or not
	 * userid 每页的查询数量根据//没有实现
	 */
	public void getArticlePaginationBySegment(PaginationSupport page, Long userid, Long segid) throws Exception;
	/**
	 * 获得文章分类下的所有文章
	 * 通过创建时间排序
	 * 只选出enabled
	 * userid 每页的查询数量根据//没有实现
	 */
	public void getEnabledArticlePaginationBySegment(PaginationSupport page, Long userid, Long segid) throws Exception;
	/**
	 * 获得创建人某个文章分类下的所有文章。如果shelfId==null，默认选出所有的
	 * 通过创建时间排序
	 * 只选出enabled
	 * creator 创建人。(每页的查询数量根据//没有实现)
	 */
	public void getEnabledArticlePaginationBySegmentCreator(PaginationSupport page, Long creator, Long segid) throws Exception;
	
	public ArticleReply getArticleReply(Long replyId) throws Exception;
	
	/**
	 * 创建新的文章分类
	 * @param userid creator
	 * @param userAgentType
	 * @return
	 */
	public ArticleReply saveArticleReply(ArticleReply reply,Long userid, String userAgentType) throws Exception;
	/**
	 * 更新
	 */
	public void updateArticleReply(ArticleReply reply, Long userid, String uat) throws Exception;
	public void deleteArticleReply(Long replyId) throws Exception;
	
	/**
	 * 获得某文章的分类.enabed or not都选出
	 * @param page
	 * @param userid 当前登录系统的用户，用于分页的PAGESIZE
	 * @param articleid 文章ID
	 */
	public void getArticleReplyPaginationByArticle(PaginationSupport page, Long userid, Long articleid) throws Exception;
	
	/**
	 * 验证article TITLE
	 * @return 1:正常；2字符太少；3字符太多;4含有非法字符
	 */
	public int validateArticleTitle(String title);
	
	/**
	 * 验证article content
	 * @return 1:正常；2字符太少；3字符太多;4含有非法字符
	 */
	public int validateArticleContent(String content);
	
	/**
	 * 验证article.reply content
	 * @return 1:正常；2字符太少；3字符太多;4含有非法字符
	 */
	public int validateReplyContent(String content);
}
